namespace CSharpPro._1023;

public class student;

    // 学生类
    public class Student
    {
        // 私有字段（封装数据）
        private string _studentId;  // 学号（唯一标识）
        private string _name;       // 姓名
        private int _age;           // 年龄
        private string _major;      // 专业
        private Dictionary<string, double> _scores;  // 课程成绩（课程名-分数）

        // 公共属性（提供访问控制）
        public string StudentId 
        { 
            get => _studentId; 
            private set  // 学号一旦设置不可修改
            {
                if (string.IsNullOrWhiteSpace(value))
                    throw new ArgumentException("学号不能为空");
                _studentId = value;
            } 
        }

        public string Name 
        { 
            get => _name; 
            set 
            {
                if (string.IsNullOrWhiteSpace(value))
                    throw new ArgumentException("姓名不能为空");
                _name = value;
            } 
        }

        public int Age 
        { 
            get => _age; 
            set 
            {
                if (value < 0 || value > 150)
                    throw new ArgumentOutOfRangeException("年龄必须在0-150之间");
                _age = value;
            } 
        }

        public string Major { get; set; }  // 专业（简单属性）

        // 构造函数（初始化对象）
        public Student(string studentId, string name, int age, string major)
        {
            StudentId = studentId;
            Name = name;
            Age = age;
            Major = major;
            _scores = new Dictionary<string, double>();
        }

        // 方法：添加课程成绩
        public void AddScore(string courseName, double score)
        {
            if (string.IsNullOrWhiteSpace(courseName))
                throw new ArgumentException("课程名不能为空");
            if (score < 0 || score > 100)
                throw new ArgumentOutOfRangeException("分数必须在0-100之间");

            if (_scores.ContainsKey(courseName))
                _scores[courseName] = score;  // 覆盖已有成绩
            else
                _scores.Add(courseName, score);
        }

        // 方法：获取课程成绩
        public double? GetScore(string courseName)
        {
            if (_scores.TryGetValue(courseName, out double score))
                return score;
            return null;  // 无此课程成绩
        }

        // 方法：计算平均成绩
        public double CalculateAverageScore()
        {
            if (_scores.Count == 0)
                return 0;

            double total = 0;
            foreach (var score in _scores.Values)
                total += score;
            return Math.Round(total / _scores.Count, 2);
        }

        // 方法：判断是否所有课程及格（假设60分为及格线）
        public bool IsAllPassed()
        {
            foreach (var score in _scores.Values)
            {
                if (score < 60)
                    return false;
            }
            return _scores.Count > 0;  // 没有课程时返回false
        }

        // 重写ToString方法，便于打印学生信息
        public override string ToString()
        {
            return $"学号：{StudentId}\n姓名：{Name}\n年龄：{Age}\n专业：{Major}\n" +
                   $"课程数量：{_scores.Count}\n平均成绩：{CalculateAverageScore()}";
        }
    }

    
